package br.uniceub.fsw.academicmobile.control;

import br.uniceub.fsw.academicmobile.dao.RelatorioDAO;
import br.uniceub.fsw.academicmobile.vo.ProfessorVO;
import br.uniceub.fsw.academicmobile.vo.FaculdadeVO;
import br.uniceub.fsw.academicmobile.vo.CursoVO;
import br.uniceub.fsw.academicmobile.vo.DisciplinaVO;
import br.uniceub.fsw.academicmobile.vo.TurmaVO;
import java.io.OutputStream;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;

/**
 * 
 * @author Pedro Ivo Povoa
 */
public class RelatorioBO {
    
    int periodoLetivo;
    int mes;
    int ano;
    String turno;
    int turma;       
    String faculdade;
    String curso;
    String disciplina;  
    HttpServletRequest request = null;
    OutputStream out = null;
    ProfessorVO professor = null;    
    RelatorioDAO relatorioDAO = null;
    
    ArrayList faculdadeList = null;
    ArrayList cursoList = null;
    ArrayList disciplinaList = null;
    ArrayList turmaList = null;
    ArrayList turnoList = null;
    ArrayList anoList = null;
        
    boolean variaveisIniciadas = false;
    
    public void inicializaVariaveis(HttpServletRequest request) {        
        if(this.variaveisIniciadas == false) {
            this.request = request;
            this.periodoLetivo = 0;
            this.mes = 0;
            this.ano = 0;
            this.turno = "";
            this.turma = Integer.parseInt(request.getParameter("cbTurma"));
            this.faculdade = "";
            this.curso = "";
            this.disciplina = "";
            this.professor = (ProfessorVO) request.getSession().getAttribute("professor");
            this.relatorioDAO = new RelatorioDAO(request.getRealPath("/")+"/WEB-INF/relatorio/");

            this.faculdadeList = new ArrayList();
            this.cursoList = new ArrayList();
            this.disciplinaList = new ArrayList();
            this.turmaList = new ArrayList();
            this.turnoList = new ArrayList();
            this.anoList = new ArrayList();            
            this.variaveisIniciadas = true;
        }
    }    
        
    public void geraRelatorioDiario(OutputStream out) {
        relatorioDAO.gerarRelatorioDiario(periodoLetivo, ano, turma, faculdade, curso, disciplina, 
                professor);                 
        relatorioDAO.exibirRelatorioDiario(out);
    }
        
    public void geraRelatorioPauta(OutputStream out) {
        relatorioDAO.gerarRelatorioPauta(periodoLetivo, ano, mes, turno, turma, 
                faculdade, curso, disciplina, professor);
        relatorioDAO.exibirRelatorioPauta(out);        
    }
    
    public void carregaVariaveis() {
        if(request.getParameter("cbTurma") != null){
            TurmaVO turmaVO = relatorioDAO.consultarTurmaPorId(request.getParameter("cbTurma"));            
            turma = Integer.parseInt(request.getParameter("cbTurma"));
            periodoLetivo = turmaVO.getNrSemestre();            
            ano = turmaVO.getDtAno();
            turno = turmaVO.getHrTurno();
            curso = String.valueOf(turmaVO.getTbCursoIdCdCurso());
            disciplina = String.valueOf(turmaVO.getTbDisciplinaIdCdDisciplina());   
            FaculdadeVO faculdadeVO = relatorioDAO.consultarFaculdadePorIdDoCurso(curso);
            faculdade = String.valueOf(faculdadeVO.getIdCdFaculdade());
        }
        if(request.getParameter("mes") != null){
            mes = Integer.parseInt(request.getParameter("mes"));
        }          
        /*
        if(request.getParameter("periodoLetivo") != null){
            periodoLetivo = Integer.parseInt(request.getParameter("periodoLetivo"));
        }        
        if(request.getParameter("mes") != null){
            mes = Integer.parseInt(request.getParameter("mes"));
        }           
        if(request.getParameter("ano") != null){
            ano = Integer.parseInt(request.getParameter("ano"));
        } 
        if(request.getParameter("turno") != null){
            turno = request.getParameter("turno");
        }           
        if(request.getParameter("turma") != null){
            turma = Integer.parseInt(request.getParameter("turma"));
        }         
        if(request.getParameter("faculdade") != null){
            faculdade = request.getParameter("faculdade");
        } 
        if(request.getParameter("curso") != null){
            curso = request.getParameter("curso");
        }           
        if(request.getParameter("disciplina") != null){
            disciplina = request.getParameter("disciplina");
        }      
        */
    }
    
    public String getFormPesquisa() {        
        StringBuffer sb = new StringBuffer();          
        //sb.append("<tr><td align='right'>Período Letivo:</td><td>" + getPeriodoLetivo() + "</td></tr>");
        //sb.append("<tr><td align='right'>Faculdade:</td><td>" + getComboFaculdade() + "</td></tr>");        
        //sb.append("<tr><td align='right'>Curso:</td><td>" + getComboCurso() + "</td></tr>");
        //sb.append("<tr><td align='right'>Disciplina:</td><td>" + getComboDisciplina() + "</td></tr>"); 
        //sb.append("<tr><td align='right'>Turno:</td><td>" + getComboTurno() + "</td></tr>");        
        //sb.append("<tr><td align='right'>Ano:</td><td>" + getComboAno() + "</td></tr>");
        sb.append("<tr><td align='right'>Mes:</td><td>" + getComboMes() + "</td></tr>");
        //sb.append("<tr><td align='right'>Turma:</td><td>" + getComboTurma() + "</td></tr>");
        return sb.toString();
    }    

    public String getComboFaculdade(){
        if(faculdadeList.isEmpty()) {
            faculdadeList = relatorioDAO.consultarFaculdades();            
        }        
        StringBuffer sb = new StringBuffer();
        sb.append("<SELECT NAME='faculdade' onchange='mudaCombo()'>");
        sb.append("<OPTION VALUE='0'>Faculdade</OPTION>");
        for(int i = 0; i < faculdadeList.size(); i++) {
            FaculdadeVO faculdadeVO = (FaculdadeVO) faculdadeList.get(i);
            sb.append("<OPTION VALUE='"+faculdadeVO.getIdCdFaculdade()+"' " + 
                    (faculdade.equals(faculdadeVO.getIdCdFaculdade().toString()) ? "selected" :"") + ">" + 
                    faculdadeVO.getSgFaculdade()+"</OPTION>");                   
        }
        sb.append("</SELECT>");        
        return sb.toString();
    }  
    
    public String getComboCurso(){
        if(faculdade != null && !faculdade.equals("")) {
            cursoList = relatorioDAO.consultarCursos(faculdade);            
        }                
        StringBuffer sb = new StringBuffer();
        sb.append("<SELECT NAME='curso' onchange='mudaCombo()'>");
        sb.append("<OPTION VALUE='0'>Curso</OPTION>");
        for(int i = 0; i < cursoList.size(); i++) {
            CursoVO cursoVO = (CursoVO) cursoList.get(i);
            sb.append("<OPTION VALUE='"+cursoVO.getIdCdCurso()+"' " + 
                (curso.equals(cursoVO.getIdCdCurso().toString()) ? "selected" :"") + ">" +
                cursoVO.getNoCurso()+"</OPTION>");   
        }                
        sb.append("</SELECT>");
        return sb.toString();
    }   
        
    public String getComboDisciplina(){
        if(curso != null && !curso.equals("")) {
            disciplinaList = relatorioDAO.consultarDisciplinas(curso);            
        }                
        StringBuffer sb = new StringBuffer();
        sb.append("<SELECT NAME='disciplina' onchange='mudaCombo()'>");
        sb.append("<OPTION VALUE='0'>Disciplina</OPTION>");
        for(int i = 0; i < disciplinaList.size(); i++) {
            DisciplinaVO disciplinaVO = (DisciplinaVO) disciplinaList.get(i);
            sb.append("<OPTION VALUE='"+disciplinaVO.getIdCdDisciplina()+"' " + 
                (disciplina.equals(disciplinaVO.getIdCdDisciplina().toString()) ? "selected" :"") + ">" +
                disciplinaVO.getNoDisciplina()+"</OPTION>");   
        }
        sb.append("</SELECT>");
        return sb.toString();
    }   
        
    public String getComboAno(){
        if(!disciplina.equals("") && !curso.equals("") && 
                !turno.equals("") && periodoLetivo > 0) {
            anoList = relatorioDAO.consultarAnoTurmas(
                    disciplina, 
                    professor.getIdCdDrt().toString(), 
                    curso, 
                    turno, 
                    String.valueOf(periodoLetivo));            
        }                     
        
        StringBuffer sb = new StringBuffer();
        sb.append("<SELECT NAME='ano' onchange='mudaCombo()'>");
        sb.append("<OPTION VALUE='0'>Ano</OPTION>");            
        for(int i = 0; i < anoList.size(); i++) {
            int valorAno = (Integer) anoList.get(i);
            sb.append("<OPTION VALUE='"+valorAno+"' " + 
                (ano == valorAno ? "selected" :"") + ">" +
                valorAno+"</OPTION>");   
        }        
        sb.append("</SELECT>");
        return sb.toString();
    }  
    
    public String getComboTurma(){
        if(!disciplina.equals("") && !curso.equals("") && 
                !turno.equals("") && periodoLetivo > 0 &&
                ano > 0) {
            turmaList = relatorioDAO.consultarTurmas(
                    disciplina, 
                    professor.getIdCdDrt().toString(), 
                    curso, 
                    turno, 
                    String.valueOf(periodoLetivo),
                    String.valueOf(ano));            
        }  
        StringBuffer sb = new StringBuffer();
        sb.append("<SELECT NAME='turma' onchange='mudaCombo()'>");
        sb.append("<OPTION VALUE='0'>Turma</OPTION>");
        
        for(int i = 0; i < turmaList.size(); i++) {
            TurmaVO turmaVO = (TurmaVO) turmaList.get(i);
            sb.append("<OPTION VALUE='"+turmaVO.getIdTurma()+"' " + 
                (turmaVO.getIdTurma() == turma ? "selected" :"") + ">" +
                turmaVO.getSgTurma()+"</OPTION>");   
        } 
        
        sb.append("</SELECT>");
        return sb.toString();
    }
    
    public String getComboTurno(){
        StringBuffer sb = new StringBuffer();
        sb.append("<SELECT NAME='turno' onchange='mudaCombo()'>");
        sb.append("<OPTION VALUE='0'>Turno</OPTION>");
        sb.append("<OPTION VALUE='matutino'" + (turno.equalsIgnoreCase("matutino") ? "selected" :"") + ">Matutino</OPTION>");
        sb.append("<OPTION VALUE='vespertino'" + (turno.equalsIgnoreCase("vespertino") ? "selected" :"") + ">Vespertino</OPTION>");                     
        sb.append("<OPTION VALUE='noturno'" + (turno.equalsIgnoreCase("noturno") ? "selected" :"") + ">Noturno</OPTION>");                     
        sb.append("</SELECT>");
        return sb.toString();
    }      
    
    public String getPeriodoLetivo(){
        StringBuffer sb = new StringBuffer();
        sb.append("<SELECT NAME='periodoLetivo' onchange='mudaCombo()'>");
        sb.append("<OPTION VALUE='0'>Periodo Letivo</OPTION>");
        sb.append("<OPTION VALUE='1'" + (periodoLetivo==1 ? "selected" :"") + ">1° Semestre</OPTION>");
        sb.append("<OPTION VALUE='2'" + (periodoLetivo==2 ? "selected" :"") + ">2° Semestre</OPTION>");                     
        sb.append("</SELECT>");
        return sb.toString();
    }    
    /**
     * @TODO Setar o periodo letivo corretamente
     * @return
     */
    public String getComboMes(){
       // periodoLetivo = 2;
        StringBuffer sb = new StringBuffer();
        sb.append("<SELECT NAME='mes' disabled='true'>");
        sb.append("<OPTION VALUE='0'>Mes</OPTION>");
        if(periodoLetivo==1) {
            sb.append("<OPTION VALUE='2'" + (mes==2 ? "selected" :"") + ">Fevereiro</OPTION>");
            sb.append("<OPTION VALUE='3'" + (mes==3 ? "selected" :"") + ">Marco</OPTION>");
            sb.append("<OPTION VALUE='4'" + (mes==4 ? "selected" :"") + ">Abril</OPTION>");
            sb.append("<OPTION VALUE='5'" + (mes==5 ? "selected" :"") + ">Maio</OPTION>");
            sb.append("<OPTION VALUE='6'" + (mes==6 ? "selected" :"") + ">Junho</OPTION>");
            sb.append("<OPTION VALUE='7'" + (mes==7 ? "selected" :"") + ">Julho</OPTION>");
        } else if(periodoLetivo==2) {
            sb.append("<OPTION VALUE='8'" + (mes==8 ? "selected" :"") + ">Agosto</OPTION>");
            sb.append("<OPTION VALUE='9'" + (mes==9 ? "selected" :"") + ">Setembro</OPTION>");
            sb.append("<OPTION VALUE='10'" + (mes==10 ? "selected" :"") + ">Outubro</OPTION>");
            sb.append("<OPTION VALUE='11'" + (mes==11 ? "selected" :"") + ">Novembro</OPTION>");
            sb.append("<OPTION VALUE='12'" + (mes==12 ? "selected" :"") + ">Dezembro</OPTION>");
        }
        sb.append("</SELECT>");
        return sb.toString();
    }            
}